package com.open.capacity.server.config;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.provider.token.store.JdbcTokenStore;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
import com.open.capacity.server.token.ResJwtAccessTokenConverter;

/**
 * @author ftquan 464725602@qq.com
 * @version 创建时间：2017年11月12日 上午22:57:51
 * 类说明
 * redis存储token
 */
@Configuration
public class TokenStoreConfig {


    @Resource
    private DataSource dataSource;

    @Bean
    @ConditionalOnProperty(prefix = "security.oauth2.token.store", name = "type", havingValue = "jdbc")
    public JdbcTokenStore jdbcTokenStore() {

//		oauth_access_token oauth_refresh_token 创建两张表
        return new JdbcTokenStore(dataSource);

    }

    //使用jwt替换原有的uuid生成token方式
    @Configuration
    @ConditionalOnProperty(prefix = "security.oauth2.token.store", name = "type", havingValue = "jwt", matchIfMissing = false)
    public static class JWTTokenConfig {
        @Bean
        public JwtTokenStore jwtTokenStore() {
            return new JwtTokenStore(jwtAccessTokenConverter());
        }

        @Bean
        public JwtAccessTokenConverter jwtAccessTokenConverter() {
            JwtAccessTokenConverter accessTokenConverter = new ResJwtAccessTokenConverter();
            accessTokenConverter.setSigningKey("neusoft");
            return accessTokenConverter;
        }
    }


}
